#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
从 Markdown 表格中提取图片并横向拼接
使用方法：python merge-images.py
"""

import re
import os
from pathlib import Path
from PIL import Image


def extract_image_paths(markdown_line):
    """
    从 Markdown 表格行中提取图片路径

    参数:
        markdown_line: Markdown 表格行文本

    返回:
        图片路径列表
    """
    # 匹配 ![alt text](image.png) 格式
    pattern = r'!\[.*?\]\((.*?)\)'
    matches = re.findall(pattern, markdown_line)
    return matches


def merge_images_horizontal(image_paths, output_path, spacing=10, base_dir='.'):
    """
    将多张图片从左到右横向拼接

    参数:
        image_paths: 图片路径列表
        output_path: 输出文件路径
        spacing: 图片之间的间距（像素）
        base_dir: 图片文件的基础目录
    """
    if not image_paths:
        print("❌ 没有找到图片")
        return False

    # 加载所有图片
    images = []
    for img_path in image_paths:
        full_path = os.path.join(base_dir, img_path)
        if not os.path.exists(full_path):
            print(f"⚠️  图片不存在: {full_path}")
            continue
        try:
            img = Image.open(full_path)
            images.append(img)
            print(f"✓ 已加载: {img_path} ({img.size[0]}x{img.size[1]})")
        except Exception as e:
            print(f"❌ 加载失败 {img_path}: {e}")

    if not images:
        print("❌ 没有成功加载任何图片")
        return False

    # 计算拼接后的尺寸（统一使用最大高度）
    max_height = max(img.height for img in images)
    total_width = sum(img.width for img in images) + spacing * (len(images) - 1)

    # 创建新画布（白色背景）
    merged_image = Image.new('RGB', (total_width, max_height), 'white')

    # 依次粘贴图片
    x_offset = 0
    for img in images:
        # 垂直居中对齐
        y_offset = (max_height - img.height) // 2
        merged_image.paste(img, (x_offset, y_offset))
        x_offset += img.width + spacing

    # 保存结果
    merged_image.save(output_path)
    print(f"\n✅ 拼接完成！输出文件: {output_path}")
    print(f"   尺寸: {total_width}x{max_height} 像素")

    return True


def process_markdown_table(markdown_line, output_filename='merged.png', base_dir='.'):
    """
    处理 Markdown 表格行并生成拼接图片

    参数:
        markdown_line: Markdown 表格行
        output_filename: 输出文件名
        base_dir: 图片所在目录
    """
    print(f"📝 解析 Markdown 表格行...")
    print(f"   {markdown_line}\n")

    # 提取图片路径
    image_paths = extract_image_paths(markdown_line)
    print(f"🔍 找到 {len(image_paths)} 张图片:")
    for i, path in enumerate(image_paths, 1):
        print(f"   {i}. {path}")
    print()

    # 拼接图片
    if image_paths:
        merge_images_horizontal(image_paths, output_filename, spacing=10, base_dir=base_dir)
    else:
        print("❌ 未找到任何图片路径")


# 示例用法
if __name__ == '__main__':
    # 当前脚本所在目录
    current_dir = Path(__file__).parent

    # 示例：处理你选中的表格行
    markdown_line = "| ![alt text](image.png) | ![alt text](image-1.png) | ![alt text](image-2.png) | ![alt text](image-3.png) |"

    print("=" * 60)
    print("图片拼接工具")
    print("=" * 60)
    print()

    # 处理并输出到 merged-首页.png
    process_markdown_table(
        markdown_line=markdown_line,
        output_filename=str(current_dir / 'merged-首页.png'),
        base_dir=str(current_dir)
    )

    print("\n" + "=" * 60)
    print("提示：你可以修改脚本中的 markdown_line 变量来处理其他表格行")
    print("=" * 60)
